package com.woniuxy.nativedemo;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author: 马宇航
 * @Todo: MQ原生消费者
 * @DateTime: 25/03/10/星期一 16:21
 * @Component: 成都蜗牛学苑
 **/
public class NativeConsumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //快点直接生成全部消费者内容，基于我的生产者
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");
        // 端口号 和浏览器的ui后台15672 不一样  后面yml中配置，就写5672
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("java112");
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin123");
        //连接工厂是创建 connection ，需要信道 channel
        Connection connection = connectionFactory.newConnection();
        // 信道创建
        Channel channel = connection.createChannel();
        // 接收消息
        // 参数： 1.队列名称 2.是否自动确认 4.消费者标签 5.其他参数  为什么消息确认要用匿名内部类？
        // 因为是消费异步处理，所以需要回调函数，所以需要匿名内部类
        channel.basicConsume("hello", false,
                (String consumerTag, Delivery message) -> {
                // 消息体
                byte[] body = message.getBody();
                System.out.println("消息接收成功：" + new String(body));
                // 手动确认
                channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
            },
                (String consumerTag)->{
            System.out.println(consumerTag);
        });
        // 自动确认
        // 消息体是字节数组
        System.out.println("消息接收成功");
    }
}
